package com.atguigu.gmall.search;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

/**
 * @author lsj
 * @create 2021-08-23 10:52
 *
 *
 * 1、引入 spring-boot-starter-data-elasticsearch
 * 2、分析：Spring Boot对ES的自动配置
 *      1、ElasticsearchDataAutoConfiguration导入了别的配置，给容器中 【ElasticsearchRestTemplate】
 *          RedisTemplate：操作redis的
 *          JdbcTemplate： 操作数据库
 *          ElasticsearchRestTemplate：以Rest方式操作ES的 9200，   9300（长链接端口【客户端不要操作】）
 *          MongoTemplate: xxxxx
 *      2、ElasticsearchRepositoriesAutoConfiguration：
 *          开启 @EnableElasticsearchRepositories 仓库功能
 *      3、ElasticsearchRestClientAutoConfiguration：
 *          给容器中放了  【RestHighLevelClient】
 *      4、所有的配置项
 *      @ConfigurationProperties(prefix = "spring.elasticsearch.rest")
 *      public class ElasticsearchRestClientProperties
 * 3、配置ES的地址
 * spring:
 *   elasticsearch:
 *     rest:
 *       uris:
 *         - http://192.168.200.188:9200
 * 4、使用  ElasticsearchRestTemplate 或者 RestHighLevelClient
 * 5、Spring Data 真正的强大之处
 *      1）、准备好给ES中需要保存的数据模型
 *              //JavaBean 上使用注解声明bean与es数据的映射信息  @Document  @Field  @Id
 *      2）、开启Es的自动化数据功能
 *         @EnableElasticsearchRepositories(basePackages = "com.atguigu.gmall.search.dao")
 *          在com.atguigu.gmall.search.dao 包下的所有接口请自动关联es相关的操作
 *      3）、准备接口
 *        public interface PersonEsDao extends ElasticsearchRepository<Person,Long>
 *      4）、特效
 *          4.1）、启动自动创建映射
 *          4.2）、起好方法名完成基本的CRUD
 *
 *
 * 6、Spring Data JPA（MySQL）
 *   @EnableJpa   写一个接口继承CRUDRepository
 *   @Table
 *   Person{
 *       @Id
 *       private Long id;
 *       @Field
 *       private String name;
 *
 *   }
 *
 *
 * 操作ES：
 * 1、创建索引（库），并给里面保存文档（json数据）
 * 2、检索，复杂DSL
 *
 *
 *
 *
 */

@EnableElasticsearchRepositories(basePackages = "com.atguigu.gmall.search.dao")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@EnableCircuitBreaker
public class SearchMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(SearchMainApplication.class,args);
    }
}

